
package com.tencent.weibo.api
{
	import com.tencent.weibo.log.LevelLogger;
	import com.tencent.weibo.operation.IRequestOperation;
	import com.tencent.weibo.operation.URLRequestOperation;
	
	import flash.events.IEventDispatcher;
	
	import mx.logging.ILogger;
	
	/**
	 * 关系链相关的API
	 * @langversion 3.0
	 * @playerversion Flash 9
	 * @playerversion AIR 1.1
	 *
	 */
	public class Friends extends AbstractAPI
	{
		/**
		 * 日志输出对象
		 */
		public static var logger:ILogger=LevelLogger.getLogger("com.tencent.weibo.api.Friends");
		
		/**
		 * 1.我的听众列表
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
//		public function fansList(reqnum:int=20,startindex:int=0):IRequestOperation
		public function fansList(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/fanslist";
//			var attachParms:Object = {};
//			attachParms.reqnum = reqnum;
//			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 2.我的听众列表(只列名称)
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
//		public function fansListName(reqnum:int=20,startindex:int=0):IRequestOperation
		public function fansListName(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/fanslist_name";
//			var attachParms:Object = {};
//			attachParms.reqnum = reqnum;
//			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 3.我收听的人的列表
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
//		public function idolList(reqnum:int=20,startindex:int=0):IRequestOperation
		public function idolList(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/idollist";
//			var attachParms:Object = {};
//			attachParms.reqnum = reqnum;
//			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 4.我收听的人的列表(只列名称)
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
//		public function idolListName(reqnum:int=20,startindex:int=0):IRequestOperation
		public function idolListName(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/idollist_name";
//			var attachParms:Object = {};
//			attachParms.reqnum = reqnum;
//			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 5.黑名单列表
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
//		public function blackList(reqnum:int=20,startindex:int=0):IRequestOperation
		public function blackList(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/blacklist";
//			var attachParms:Object = {};
//			attachParms.reqnum = reqnum;
//			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 6.特别收听列表
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
//		public function specialList(reqnum:int=20,startindex:int=0):IRequestOperation
		public function specialList(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/speciallist";
//			var attachParms:Object = {};
//			attachParms.reqnum = reqnum;
//			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 7.收听某个用户
		 * @param name 他人的帐户名列表，用“,”隔开，例如：abc,bcde,effg（可选）
		 * @param fopenids 你需要读取的用户openid列表，用下划线“_”隔开，name和fopenids至少选一个，若同时存在则以name值为主
		 * @return IRequestOperation实例
		 */		
//		public function add(name:String=null,fopenids:String=null):IRequestOperation
		public function add(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/add";
			var attachParms:Object = {};
//			if(name != null) 
//				attachParms.name = name;
//			if(fopenids != null) 
//				attachParms.fopenids = fopenids;
			return generateDataRequest(url,attachParms,"POST");
		}
		/**
		 * 8.取消收听某个用户
		 * @param name  他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @return IRequestOperation实例
		 */		
//		public function del(name:String=null,fopenid:String=null):IRequestOperation
		public function del(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/del";
			var attachParms:Object = {};
//			if(name != null)
//				attachParms.name = name;
//			if(fopenid != null)
//				attachParms.fopenid = fopenid;
			return generateDataRequest(url,attachParms,"POST");
		}
		/**
		 * 9.特别收听某个用户
		 * @param name  他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @return IRequestOperation实例
		 */		
//		public function addSpecial(name:String=null,fopenid:String=null):IRequestOperation
		public function addSpecial(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/addspecial";
//			var attachParms:Object = {};
//			if(name != null)
//				attachParms.name = name;
//			if(fopenid != null)
//				attachParms.fopenid = fopenid;
			return generateDataRequest(url,attachParms,"POST");
		}
		/**
		 * 10.取消特别收听某个用户
		 * @param name  他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @return IRequestOperation实例
		 */		
//		public function delSpecial(name:String=null,fopenid:String=null):IRequestOperation
		public function delSpecial(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/delspecial";
//			var attachParms:Object = {};
//			if(name != null)
//				attachParms.name = name;
//			if(fopenid != null)
//				attachParms.fopenid = fopenid;
			return generateDataRequest(url,attachParms,"POST");
		}
		/**
		 * 11.添加某个用户到黑名单
		 * @param name  他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @return IRequestOperation实例
		 */		
//		public function addBlackList(name:String=null,fopenid:String=null):IRequestOperation
		public function addBlackList(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/addblacklist";
//			var attachParms:Object = {};
//			if(name != null)
//				attachParms.name = name;
//			if(fopenid != null)
//				attachParms.fopenid = fopenid;
			return generateDataRequest(url,attachParms,"POST");
		}
		/**
		 * 12.从黑名单中删除某个用户
		 * @param name  他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @return IRequestOperation实例
		 */		
//		public function delBlackList(name:String=null,fopenid:String=null):IRequestOperation
		public function delBlackList(attachParms:Object):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/delblacklist";
//			var attachParms:Object = {};
//			if(name != null)
//				attachParms.name = name;
//			if(fopenid != null)
//				attachParms.fopenid = fopenid;
			return generateDataRequest(url,attachParms,"POST");
		}
		/**
		 * 13.检测是否我的听众或收听的人
		 * @param names 其他人的帐户名列表，用逗号“,”分隔，如aaa,bbb（最多30个，可选）
		 * @param fopenids 其他人的的用户openid列表，用“_”隔开，names和fopenids至少选一个，若同时存在则以names值为主
		 * @param flag 0 检测粉丝，1检测偶像2 两种关系都检测
		 * @return IRequestOperation实例
		 */		
		public function check(names:String=null,fopenids:String=null,flag:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/check";
			var attachParms:Object = {};
			if(names != null)
				attachParms.names = names;
			if(fopenids != null)
				attachParms.fopenids = fopenids;
			attachParms.flag = flag;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 14.其他帐户听众列表
		 * @param name  他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
		public function userFansList(name:String=null,fopenid:String=null,reqnum:int=20,startindex:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/user_fanslist";
			var attachParms:Object = {};
			if(name != null)
				attachParms.name = name;
			if(fopenid != null)
				attachParms.fopenid = fopenid;
			attachParms.reqnum = reqnum;
			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 15.其他帐户收听的人列表
		 * @param name  他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
		public function userIdolList(name:String=null,fopenid:String=null,reqnum:int=20,startindex:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/user_idollist";
			var attachParms:Object = {};
			if(name != null)
				attachParms.name = name;
			if(fopenid != null)
				attachParms.fopenid = fopenid;
			attachParms.reqnum = reqnum;
			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 16.其他帐户特别收听的人列表
		 * @param name  他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
		public function userSpecialList(name:String=null,fopenid:String=null,reqnum:int=20,startindex:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/user_speciallist";
			var attachParms:Object = {};
			if(name != null)
				attachParms.name = name;
			if(fopenid != null)
				attachParms.fopenid = fopenid;
			attachParms.reqnum = reqnum;
			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 17.我的听众列表，简单信息（200个）
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
		public function fansListS(reqnum:int=20,startindex:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/fanslist_s";
			var attachParms:Object = {};
			attachParms.reqnum = reqnum;
			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 18.我的收听列表，简单信息（200个）
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
		public function idolListS(reqnum:int=20,startindex:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/idollist_s";
			var attachParms:Object = {};
			attachParms.reqnum = reqnum;
			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 19.互听关系链列表
		 * @param name 他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @param reqnum 请求个数(1-30)
		 * @param startindex 起始位置（第一页填0，继续向下翻页：填：【reqnum*（page-1）】）
		 * @return IRequestOperation实例
		 */		
		public function mutualList(name:String=null,fopenid:String=null,reqnum:int=20,startindex:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"friends/mutual_list";
			var attachParms:Object = {};
			if(name != null)
				attachParms.name = name;
			if(fopenid != null)
				attachParms.fopenid = fopenid;
			attachParms.reqnum = reqnum;
			attachParms.startindex = startindex;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		
	}
}